#pragma once
#include "Vector.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <GL/gl.h>
#include <GL/glu.h>
#include <GL/glut.h>

class Quaternion
{
	friend class Vector;
public:
	Quaternion(void);
	~Quaternion(void);

	Quaternion(Vector *vector);//quaternion from 3D vector
	Quaternion(Vector vector);
	Quaternion(float angleDegrees, bool x, bool y, bool z);//rotation
	Quaternion(float angleDegrees, Vector *vector);
	Quaternion(float angleDegrees, Vector vector);
	Quaternion(float _w, float _x, float _y, float _z);
	Quaternion multiply(Quaternion *other);
	Quaternion multiply(Quaternion other);
	Quaternion add(Quaternion *other);
	Quaternion add(Quaternion other);
	Quaternion subtract(Quaternion *other);
	Quaternion subtract(Quaternion other);
	GLfloat dotProduct(Quaternion *other);
	GLfloat dotProduct(Quaternion other);
	GLfloat returnLength();
	void normalize();
	Quaternion conjugate();
private:
	GLfloat w,x,y,z;
};

